﻿Imports System.Text
Imports ValorYReferencia.Facturacion

<TestClass()>
Public Class FacturacionTest
    <TestInitialize()>
    Public Sub InicializacionDelTest()

    End Sub
    <TestMethod()>
    Public Sub ObtenerHistoricoDelCliente()
        Dim cliente As New Cliente()
        cliente.Nombre = "Nombre"
        cliente.Apellido = "Apellido"

        cliente.Facturas.Add(getFactura1()) '81.80
        cliente.Facturas.Add(getFactura2()) '175.65
        cliente.Facturas.Add(getFactura3()) '150.25
        Assert.AreEqual(cliente.ObtenerConsumoHistorico(), 407.7)
    End Sub

    <TestMethod()>
    Public Sub ObtenerHistoricoDelClienteDeFacturasAnterioresA2012()
        Dim cliente As New Cliente()
        cliente.Nombre = "Nombre"
        cliente.Apellido = "Apellido"

        cliente.Facturas.Add(getFactura1()) '81.80
        cliente.Facturas.Add(getFactura2()) '175.65
        cliente.Facturas.Add(getFactura3()) '150.25
        Assert.AreEqual(cliente.ObtenerConsumoDeFacturas(AddressOf EsFacturaAnteriorA2012), 257.45)
    End Sub

    Private Function EsFacturaAnteriorA2012(ByVal factura As Factura)
        Return factura.FechaDeEmision.Year < 2012
    End Function

    <TestMethod()>
    Public Sub ObtenerTotalDeFactura()
        Dim factura As Factura = getFactura1()
        Assert.AreEqual(factura.ObtenerTotal(), 81.8)
    End Sub

    <TestMethod()>
    Public Sub ObtenerSubtotalDeDetalle()
        Dim detalle As New DetalleDeFactura()
        detalle.Cantidad = 5
        detalle.Producto = getAlfajor()
        Assert.AreEqual(detalle.ObtenerSubtotal(), 3.75)
    End Sub

    Private Function getFactura1() As Factura
        Dim factura As New Factura()
        factura.FechaDeEmision = New Date(2010, 1, 1)

        Dim detalle As New DetalleDeFactura()
        detalle.Cantidad = 3
        detalle.Producto = getAlfajor()
        factura.Detalles.Add(detalle)

        detalle = New DetalleDeFactura()
        detalle.Cantidad = 1
        detalle.Producto = getJabonEnPolvo()
        factura.Detalles.Add(detalle)

        detalle = New DetalleDeFactura()
        detalle.Cantidad = 1
        detalle.Producto = getLavandina()
        factura.Detalles.Add(detalle)
        Return factura
    End Function

    Private Function getFactura2() As Factura
        Dim factura As New Factura()
        factura.FechaDeEmision = New Date(2011, 1, 1)

        Dim detalle As New DetalleDeFactura()
        detalle.Cantidad = 1
        detalle.Producto = getAlfajor()
        factura.Detalles.Add(detalle)

        detalle = New DetalleDeFactura()
        detalle.Cantidad = 2
        detalle.Producto = getJabonEnPolvo()
        factura.Detalles.Add(detalle)

        detalle = New DetalleDeFactura()
        detalle.Cantidad = 3
        detalle.Producto = getLavandina()
        factura.Detalles.Add(detalle)
        Return factura
    End Function

    Private Function getFactura3() As Factura
        Dim factura As New Factura()
        factura.FechaDeEmision = New Date(2012, 1, 1)

        Dim detalle As New DetalleDeFactura()
        detalle.Cantidad = 10
        detalle.Producto = getAlfajor()
        factura.Detalles.Add(detalle)

        detalle = New DetalleDeFactura()
        detalle.Cantidad = 1
        detalle.Producto = getJabonEnPolvo()
        factura.Detalles.Add(detalle)

        detalle = New DetalleDeFactura()
        detalle.Cantidad = 5
        detalle.Producto = getLavandina()
        factura.Detalles.Add(detalle)
        Return factura
    End Function

    Private Function getAlfajor() As Producto
        Dim producto As New Producto()
        producto.Nombre = "Alfajor"
        producto.Precio = 0.75
        Return producto
    End Function

    Private Function getJabonEnPolvo() As Producto
        Dim producto As New Producto()
        producto.Nombre = "Jabon en Polvo"
        producto.Precio = 63.75
        Return producto
    End Function

    Private Function getLavandina() As Producto
        Dim producto As New Producto()
        producto.Nombre = "Lavandina"
        producto.Precio = 15.8
        Return producto
    End Function
End Class
